<?php

class Utils
{
	public static function get_setting_value($name, $def)
	{
		if(!empty($_GET[$name]))
		{
			$def = $_GET[$name];
			setcookie($name, $def, time() + 2592000, '/');
		}
		elseif(!empty($_COOKIE[$name]))
		{
			$def = $_COOKIE[$name];
		}
		
		return $def;
	}
	
	public static function get_param($name, $def)
	{
		if((!isset($_GET[$name])) || ($_GET[$name] == null) || ($_GET[$name] == ""))
			return $def;
		else
			return (string)trim($_GET[$name]);
	}
	
	public static function post_param($name, $def)
	{
		if((!isset($_POST[$name])) || ($_POST[$name] == null) || ($_POST[$name] == ""))
			return $def;
		else
			return (string)trim($_POST[$name]);
	}
	
	public static function val($x)
	{
		if($x == 'false')
			return 0;
		elseif($x == 'true')
			return 1;
		elseif($x == '0')
			return 0;
		elseif($x == '1')
			return 1;
		elseif($x == 'null')
			return null;
		else
			return $x;
	}
	
	public static function parse_url2($url)
	{
		if(empty($url)) return null;
		$params = parse_url($url);
		if(!empty($params['query']))
		{
			$pairs = split('&', $params['query']);
			foreach($pairs as $pair)
			{
				list($key, $val) = split('=', $pair);
				$params[$key] = $val;
			}
		}
		return $params;
	}

	public static function safe_encode($html)
	{
		return Utils::win2utf(htmlspecialchars(Utils::utf2win($html)));
	}
	
	public static function safe_decode($html)
	{
		return Utils::win2utf(htmlspecialchars_decode(Utils::utf2win($html)));
	}
	
	public static function ts_tomorrow()
	{
		return Utils::ts_add_days(mktime(), 1);
	}
	
	public static function ts_add_days($dt, $days)
	{
		$dta = getdate($dt);
		return mktime($dta["hours"], $dta["minutes"], $dta["seconds"], $dta["mon"], $dta["mday"] + $days, $dta["year"]);
	}
	
	public static function get_day_name($dt)
	{
		// $parts = getdate($dt);
		$names = array('воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота');
		return $names[date("w", $dt)];
		// return $names[$parts[weekday]];
		// return $parts[weekday];
	}
	
	public static function get_num_days_to_weekend($dt = null, $full_week_count = 0, $forward = TRUE)
	{
		if(is_null($dt))
			$dt = mktime();
		elseif(is_string($dt))
		{
			$dt = date_parse($dt);
			$dt = mktime(0, 0, 0, $dt["month"], $dt["day"], $dt["year"]);
		}
		$dta = getdate($dt);
		$num = $dta["wday"];
		if($num == 0) $num = 7;
		if($forward) $num = 8 - $num;
		$num += ($full_week_count * 7);
		return $num;
	}
	
	public static function parse_dt($press_date)
	{
		$press_date = str_replace("-", "", $press_date);
		$press_date = str_replace(".", "", $press_date);
		// 20100921
		return mktime(0, 0, 0,
			(integer)substr($press_date, 4, 2),
			(integer)substr($press_date, 6, 2),
			(integer)substr($press_date, 0, 4));
	}
	
	public static function press_date($dt = null)
	{
		if(is_null($dt))
			$dt = mktime();
		elseif(is_string($dt))
		{
			$dt = date_parse($dt);
			$dt = mktime(0, 0, 0, $dt["month"], $dt["day"], $dt["year"]);
		}
		return date("Ymd", $dt);
	}
	
	/**
	 * Выбор строки в зависимости от значения $num
	 *
	 * пример строк: "день", "дня", "дней"
	 * 
	 */
	public static function select_str($num, $str1, $str2, $str3)
	{
		$num = substr((string)$num, -2);
		
		if(10 < $num && $num < 20) return $str3;
		
		while($num > 20)
			$num = $num % 10;
		
		if($num == 1) return $str1;
		
		if(0 == $num || $num > 4) return $str3;
		
		return $str2;
	}
	
	public static function utf2win($str)
	{
		return iconv("UTF-8", "windows-1251", $str);
	}
	
	public static function win2utf($str)
	{
		return iconv("windows-1251", "UTF-8", $str);
	}
	
// ----------------------------------------------------------

/***********************************************************************************
Функция img_resize(): генерация thumbnails
Параметры:
  $src             - имя исходного файла
  $dest            - имя генерируемого файла
  $width, $height  - ширина и высота генерируемого изображения, в пикселях
Необязательные параметры:
  $rgb             - цвет фона, по умолчанию - белый
  $quality         - качество генерируемого JPEG, по умолчанию - максимальное (100)
***********************************************************************************/
	public static function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)
	{
		if (!file_exists($src)) return false;
		
		$size = getimagesize($src);
		
		if ($size === false) return false;
		
		// Определяем исходный формат по MIME-информации, предоставленной
		// функцией getimagesize, и выбираем соответствующую формату
		// imagecreatefrom-функцию.
		$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
		$icfunc = "imagecreatefrom" . $format;
		if (!function_exists($icfunc)) return false;
		
		$x_ratio = $width / $size[0];
		$y_ratio = $height / $size[1];
		
		$ratio       = min($x_ratio, $y_ratio);
		$use_x_ratio = ($x_ratio == $ratio);
		
		$new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
		$new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
		$new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
		$new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
		
		$isrc = $icfunc($src);
		$idest = imagecreatetruecolor($width, $height);
		
		imagefill($idest, 0, 0, $rgb);
		imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, 
		$new_width, $new_height, $size[0], $size[1]);
		
		imagejpeg($idest, $dest, $quality);
		
		imagedestroy($isrc);
		imagedestroy($idest);
		
		return true;
	}


}
 
